package com.general.framework.qinyi.event.listener;

import org.qinyi.event.PushEvent;
import org.qinyi.event.PushEventMessage;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

import java.util.HashSet;
import java.util.Set;

/**
 * 推送事件监听器 - 第二种实现方式
 */
@Component
public class PushEventListener02 {
    @Async("eventAsyncTaskExecutor")  // 去掉该注解，则该监听器会在Main线程中同步执行
    @EventListener(PushEvent.class)
    public void onApplicationEvent(PushEvent event) {
        PushEventMessage message = (PushEventMessage) event.getSource();
        Set<String> strings = new HashSet<>(); // HashSet的add方法，如果添加的元素已经存在，则不会重复添加
        strings.add("PushEventListener02");
        strings.add("PushEventListener03");
        strings.add("PushEventListener03");
        if(strings.contains(message.getContent())) {
            return;
        }
        System.out.println(strings);

        // if(event.getApplicationContext().getParent() == null){//root application context 没有parent，他就是老大.
        //     //需要执行的逻辑代码，当spring容器初始化完成后就会执行该方法。
        //     System.out.println("PushEventListener02 收到推送事件：" + message.getContent());
        // }
    }
}
